﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using DynamicAuditor.DTOs;

namespace DynamicAuditor.DALAuditor
{
    public class clsPerfilMg
    {


        //Constructor
        public clsPerfilMg()
        {

        }


        //Declaracion de la varaiable tipo datacontext que vamos a utilizar en toda la clase.
        DynamicAuditorDataContext bd = new DynamicAuditorDataContext();


        #region Metodos

        public  List<dtoPerfiles> ObtenerPerfilesActivos()
        {
            int i = 0;
            List<dtoPerfiles> perfilesactivos = new List<dtoPerfiles>();

            try
            {
                var perfactivos = (from p in bd.PERFILEs
                                   where p.Activo == true
                                   orderby p.Perfil
                                   select p).ToList();

                foreach(PERFILE per in perfactivos)
                {
                    perfilesactivos.Add(new dtoPerfiles());
                    perfilesactivos[i].Activo = Convert.ToBoolean(per.Activo);
                    perfilesactivos[i].Codigo = Convert.ToInt16(per.Codigo);
                    perfilesactivos[i].Descripcion = per.Descripcion;
                    perfilesactivos[i].Idperfil = per.idPerfil;
                    perfilesactivos[i].Perfil = per.Perfil;
                    i++;

                }

            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo obtener la informacion solicitada." + ex.Message);
            }

            return perfilesactivos;
        }

        public int CrearPerfil(dtoPerfiles perfil)
        {
            int resp = 0;
            PERFILE perf = new PERFILE();

            try
            {
                perf.Activo = perfil.Activo;
                perf.Codigo = perfil.Codigo;
                perf.Descripcion = perfil.Descripcion;
                perf.Perfil = perfil.Perfil;

                bd.PERFILEs.InsertOnSubmit(perf);
                bd.SubmitChanges();
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo crear el perfil." + ex.Message);
            }

            resp = 1;

            return resp;
        }

        public int DeletePerfil(int idperfil)
        {
            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0

            int x = 0;

            try
            {

                var per = bd.PERFILEs.Single(p => p.idPerfil == idperfil);

                bd.PERFILEs.DeleteOnSubmit(per);
                bd.SubmitChanges();
                x = 1;
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo borrar el perfil solicitado. " + ex.Message);
                x = 0;
            }

            return x;

        }

        public int UpdatePerfil(dtoPerfiles perfil)
        {

            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0
            int i = 0;


            try
            {
                PERFILE per = bd.PERFILEs.Single(p => p.idPerfil == perfil.Idperfil);
                per.Descripcion = perfil.Descripcion;
                per.Activo = perfil.Activo;
                per.Codigo = perfil.Codigo;
                per.Perfil = perfil.Perfil;
               
                
                bd.SubmitChanges();

                i = 1;

            }
            catch (Exception ex)
            {
                throw new Exception("No se pudieron actualizar los datos del perfil." + ex.Message);
            }
            return i;
        }

        public dtoPerfiles ObtenerPerfilporId(int idperfil)
        {
            dtoPerfiles perfil = new dtoPerfiles();

            try
            {
                PERFILE datperfil = bd.PERFILEs.Single(p => p.idPerfil == idperfil);
                perfil.Activo = Convert.ToBoolean(datperfil.Activo);
                perfil.Codigo = Convert.ToInt16(datperfil.Codigo);
                perfil.Descripcion = datperfil.Descripcion;
                perfil.Perfil = datperfil.Perfil;
                perfil.Idperfil = datperfil.idPerfil;
               
                
            }
            catch (Exception ex)
            {
                return null;
                throw new Exception("No se pudo obtener datos del perfil. " + ex.Message);

            }

            return perfil;
        }

        public dtoPerfiles ObtenerPerfilporNombreUsuario(string strperfil)
        {
            dtoPerfiles perfil = new dtoPerfiles();

            try
            {
                PERFILE datperfil = bd.PERFILEs.Single(p => p.Perfil == strperfil);
                perfil.Activo = Convert.ToBoolean(datperfil.Activo);
                perfil.Codigo = Convert.ToInt16(datperfil.Codigo);
                perfil.Descripcion = datperfil.Descripcion;
                perfil.Perfil = datperfil.Perfil;
                perfil.Idperfil = datperfil.idPerfil;
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo obtener datos del perfil. " + ex.Message);
            }

            return perfil;
        }



        #endregion Metodos


    }


}
